PhoenixFramework vs N2O

Дети

https://erlang.org/pipermail/erlang-questions/2016-January/087452.html

Получил такое письмо только что. Думал сразу ебануть ответочку в рассылку, но сначала тезисно в ЖЖ, и начну этот ответ так.

Я обычно избегаю постить в расслылку про использвание N2O и продуктов на N2O (это кстати чистая правда, вы там от меня один пост только найдете). Но если вам нужны Вебсокеты, то вот что я могу сказать по этому поводу (кроме https://websockets.erlang.one конечно, это было сказано миру благодаря ZAMOTIVATOR, храни его боженька).

1. N2O поддерживает фолбек начиная с версии 2.3, как известно из истории. Зачем? Только три китайца в мире из провинции Хуй Пиз Ды знают зачем нужен фолбек, ну и в Бразилии очевидно тоже нужен. Еще Валкин говорил, что в США нужен у AT&T оператора. Хотя у меня в штатах вебсокеты работали без SSL, хуй знает какой у меня оператор был.

2. Кросс-орижин? Поддержку этого в N2O занимает ровно четыре строки. Зачем это выделять в отдельный пункт и хвастаться этим — мне неясно.

3. Поддержка IE8 без вебсокетов? В N2O XHR fallback настолько маленький, что я могу привести его имплементацию полностью в этом посте!

$xhr = { heart: false, interval: 100, creator: function(url) { $conn.url = xhr_url(url); $xhr.channel = { send: xhr_send, close: xhr_close }; $conn.onopen(); return $xhr.channel; }, onheartbeat: function() { xhr('POST',{});} }; transports = [$ws,$xhr]; function xhr_header(request) { request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'); } function xhr_url(url) { return url.replace('ws:', 'http:').replace('wss:', 'https:'); } function xhr_close() { $conn.onclose(); clearInterval(heartbeat); } function xhr_send(data) { return xhr('POST',data); } function xhr_receive(data) { if (data.length != 0) $conn.onmessage({'data':data}); } function xhr(method,data) { var request = new XMLHttpRequest(); request.open(method,$conn.url,true); xhr_header(request); request.onload = function() { console.log(request.response); xhr_receive(request.response); }; request.send(data); return true; }

Уверен вы найдете массу причин, по которым этот код хуйня, а этот — произведение искусства. Только знайте, что ваш порядковый номер будет при этом 11232344580270. Также принято в интернете мычать про bullet, который нихуя не работает, когда вам нужен стейтфул конекшин.

4. Возможность использовать только SSL? Вроде как любой может вебсокеты на SSL поднять, попробуйте поднимите без SSL у AT&T провайдера. Почему Вебсокет должен блокировать SSL, а не скажем nginx или тот кто терминирует — мне не понятно.

5. Ниибически крутые якобы каналы на gen_server (доказано на какой-то мегаксеон тачке, на которой 2 миллиона конекций ковбой держал). Я вообще не понимаю как каналы на gen_server могут быть быстрее N2O, который ВООБЩЕ НЕ СОЗДАЕТ НИКАКИХ ПРОЦЕССОВ. N2O работает исключетельно в процессах ковбоя, мы не спавним для интерконнекта вообще ничего. Более легковесной хуйни вы просто не придумаете. А мы придумаем! Мы уже написали вебсокет сервер, чтобы выбросить нахуй уебищный ковбой. Мы вам такие цифры нарисуем на обычном BEAM (про LING на Xen я вообще молчу), что вы ебанетесь.

6. Распределенная ПабСаб система для каналов? С первой версии N2O поддерживает кастомные ПабСаб системы. В качестве дефолтной используется gproc от Ульфа. Я конечно люблю Жозе, но вряд ли он ебанул что-то круче gproc + unsplit (кстати эта хуйня у меня работала успешно 3 года назад). Работает в дистрибютед режиме? RLY? Интересно, рассказали ли об этом https://aphyr.com, а то пацаны то и не знают. Каждый месяц вижу новый распределенный ПабСаб на эрланге на ETS таблицах на гитхабе. И все думают, что это персистетный(!), распределенный(!) пабсаб. Уверены в этом!

7. Феникс — 7600 LOC, N2O — 1200 LOC. Долго искал что феникс умеет такое, что N2O не умеет, но так и не нашел. Вроде как на Эликсире короче должно быть? Я помню как мы с Кирилловым решали на перегонки тестовое задание для того, чтобы устроиться на работу к Валкину. На эликсире тот игрушечный toy_leader занял 170 строк, на Эрланге 70. С тех пор у меня ощущение, что с Эликсиром хиспеторв наебуют.

Но вприципе это похуй, все равно хипстеры этот ЖЖ не читают, так что я думаю не сильно им подпорчу репутации. Когда будете сравнивать также не забудьте, что для того чтобы поставить Феникс вам придется скачать Эликсир!!! А это не 7 с хуем, а уже 75 тысяч строк кода :-) Напомню, что n2o вытаскивается с гитхаба, билдится вместе с рабочим примером и запускается полностью за 50 секунд (все вместе).

8. Что есть в N2O чего нет в Фениксе? Незнаю есть ли у них вот такой крутой File Upload, который может ебашить 25Мегобайд в секунду прямо с браузера? http://5ht.co/ftp.htm Поддерживает докачку и обрывы со стороны клиента и сервера, занимает 80 строк кода. Можно портировать на чистый ковбой, если есть мозг. Вообще имея 80 строк рабочего кода, можно портировать куда угодно.

Эту хуйню написал DOXTOP, за что храни его Лямбдагарбха, здоровья ему и долголетия. Он счас на Scala пишет с чуваками которые любят Java, поэтому здоровье ему понадобится.

9. N2O поддерживает разные форматтеры: JSON, XML, BERT и можете другие подключать. Врядли Феникс такое умеет, везде JSON по вебсокетам ездит. Кто пишет так называемый Hiload (это модно счас так говорить или уже нет?) тот знает, что любой JSON парсер на стороне сервера хуже чем никакого парсера. Но хипстеры любят JSON, а банкам похуй, поэтому в банках работает N2O, а на фениксе я пока ни одного сайта не видел где было бы 2 миллиона пользователей (как заявлено в интернетах), а N2O обслуживает 30 миллионов украинчегов в самом большом банке страны.

10. Персистенс, CRDT? Это блядь смешно. Имея такую офигенскую базу данных как mnesia, искать прибежища в хуйовом riak_core это нужно постараться. Победитель гугллового поиска "mnesia сыпется 2ГБ потрачено". Все ватники Всея Руси во главе с ебанатом Лапшой уверены, что mnesia не годится вообще. Отец Эрланга, Валкин, тоже уверен. Все уверены, а нам похуй. У нас мнезия работает 3 года, ни одного инцидента. Стопаем по CTRL+C, DETS таблицы (disc_only_copies), поднимается база за несколько секунд, терабайты. WhatsApp работает на mnesia в режиме disc_copies, а все русские мычат, что никто не умееет ее готовить. Пусть мычат. Караван идет, как говорится. Секреты раскрывать не будем, скажем только что это все у нас работает на штатном open-source продукте, KVS, это типа библиотека-компаньон для персистенса (redis, mnesia, SQL, filesystem, mongodb драйвера), которую опять же написал святой монах DOXTOP. Доктор вообще все написал и N2O и KVS, я просто на супорте сижу. Кстати тот HoTT совместимый язык который мы пишем — мы пишем для того, чтобы сертифицировать KVS, который занимает всего 300 строк (без драйверов).

11. Кто использует BERT.js написаный Расти тот петрушка. Потому что BERT.js был написан еще во времена, когда небыло бинарных буферов в ждваскрипте. Там на строках склеивается строка (и заявляется что это якобы бинарь). Просто потому что я могу — привожу полный текст BERT декодера который написан Андреем Мартемьяновым:

function nop(b) { return []; }; function big(b) { var sk=b==1?sx.getUint8(ix++):sx.getInt32((a=ix,ix+=4,a)); ix+=sk+1; return []; }; function int(b) { return b==1?sx.getUint8(ix++):sx.getInt32((a=ix,ix+=4,a)); }; function dec(d) { sx=new DataView(d);ix=0; if(sx.getUint8(ix++)!==131)throw("BERT?"); return din(); }; function str(b) { var dv,sz=(b==2?sx.getUint16(ix):sx.getInt32(ix));ix+=b; var r=sx.buffer.slice(ix,ix+=sz); return b==2?utf8_dec(r):r; }; function run(b) { var sz=(b==1?sx.getUint8(ix):sx.getUint32(ix)),r=[]; ix+=b; for(var i=0;i<sz;i++) r.push(din()); if(b==4)ix++; return r; }; function din() { var c=sx.getUint8(ix++),x; switch(c) { case 97: x=[int,1];break; case 98: x=[int,4]; break; case 100: x=[str,2]; break; case 110: x=[big,1]; break; case 111: x=[big,4]; break; case 104: x=[run,1]; break; case 107: x=[str,2]; break; case 108: x=[run,4]; break; case 109: x=[str,4]; break; default: x=[nop,0]; } return {t:c,v:x[0](x[1])};};

Энкодер не намного длинее, 30 LOC всего. Внимательно почитайте, а потом загляните в BERT.js.

12. Ключевые JavaScript файлы N2O если зазиповать то они занимают меньше 1400 байт. Это означает, что весь N2O/JavaScript помещается в MSS окно -- хуйня недосягаемая ни для одного веб фреймворка в мире!

13. Есть еще n2o.hs, но его специально нет на Хакадже, чтобы ебанаты-ватники типа Зефира продолжали жрать свое Хаскель говно. N2O.Haskell написал не абы кто, а сам NPONECCOP. Так шо вы осторожнее набрасывайте.

Пост написан специально для DOXTOP, чтобы он улыбнулся и выздоровел :-)


˙
ЕБАШИМ КАМЕНТЫ